import { setAttrData, createSkus, getChangeAttrs, formatDetailDataToAttrList, contactAttrData as $contactAttrData } from '@/util/formatAttr'
/**
 * 搜索属性 mixins
 */

const obj = {
  data() {
    return {
      attrList: [],
      cacheList: []
    }
  },

  methods: {
    /**
     * 格式化属性分类数据（全部）
     * 只渲染 is_require === '1' 的数据（必须的）
     * @param {Object} data 属性分类数据
     */
    formatAttrAndClassData(data) {
      // 生成属性列表
      const tmp = []
      data.forEach(v => {
        if (v.is_require === '0') return false
        tmp.push(setAttrData(v))
      })
      // 生成 sku
      this.attrList = createSkus(tmp)
    },

    // 格式化参数
    formatOutputData() {
      return getChangeAttrs(this.attrList)
    },

    /**
     * 格式化详情,必须的属性数据
     * 只生成简单的 sku 数据结构
     * 包含 属性 id，已选的分类，已选的子级分类，分类的 id
     * @param {Array<object>} data attrList 属性数组
     */
    formatInfoData(data) {
      const attrTmp = formatDetailDataToAttrList(data)
      this.cacheList = attrTmp
    },

    /**
     * 将 attrList 和 cacheList 数据合并
     * 以 attrList 为底，将 selects 填充
     */
    contactAttrData() {
      this.attrList = $contactAttrData(this.attrList, this.cacheList)
      console.log('必选：', this.attrList)
      this.cacheList = []
    },

    /**
     * 组件通知父级，skuData 数据更新。进行生成数据结构
     * @param {Object} skuData sku 数据集合
     */
    getSku(skuData) {
      // 将 sku 添加到 attrList 列表里
      console.log('skudata:', skuData)
      console.log('attrList', this.attrList)
      const cacheArr = []
      // 把 attrList 和 skuData 相同 id 的属性和 attrList 必须的抽出来
      this.attrList = this.attrList.filter(v => {
        if (v.is_require === '1') return true
        return skuData.some((item) => {
          if (v.id === item.value) {
            cacheArr.push(item.value)
            return true
          }
        })
      })
      // 将有 skuId 的去除，再添加
      skuData.forEach((v) => {
        if (cacheArr.includes(v.value)) return false
        const { value } = v
        this.attrList.push({
          ...v,
          skuId: value
        })
      })
    }
  }
}

export default obj
